package nes

var instrTable = map[uint8]*instr{
	0x69: &instr{name: "ADC", size: 2, cycles: 2, fn: adc, addrMode: AddrModeImmediate},
	0x65: &instr{name: "ADC", size: 2, cycles: 3, fn: adc, addrMode: AddrModeZeroPage},
	0x75: &instr{name: "ADC", size: 2, cycles: 4, fn: adc, addrMode: AddrModeZeroX},
	0x6d: &instr{name: "ADC", size: 3, cycles: 4, fn: adc, addrMode: AddrModeAbs},
	0x7d: &instr{name: "ADC", size: 3, cycles: 4, fn: adc, addrMode: AddrModeAbsX},
	0x79: &instr{name: "ADC", size: 3, cycles: 4, fn: adc, addrMode: AddrModeAbsY},
	0x61: &instr{name: "ADC", size: 2, cycles: 6, fn: adc, addrMode: AddrModeXIndirect},
	0x71: &instr{name: "ADC", size: 2, cycles: 5, fn: adc, addrMode: AddrModeIndirectY},

	0x29: &instr{name: "AND", size: 2, cycles: 2, fn: and, addrMode: AddrModeImmediate},
	0x25: &instr{name: "AND", size: 2, cycles: 3, fn: and, addrMode: AddrModeZeroPage},
	0x35: &instr{name: "AND", size: 2, cycles: 4, fn: and, addrMode: AddrModeZeroX},
	0x2d: &instr{name: "AND", size: 3, cycles: 4, fn: and, addrMode: AddrModeAbs},
	0x3d: &instr{name: "AND", size: 3, cycles: 4, fn: and, addrMode: AddrModeAbsX},
	0x39: &instr{name: "AND", size: 3, cycles: 4, fn: and, addrMode: AddrModeAbsY},
	0x21: &instr{name: "AND", size: 2, cycles: 6, fn: and, addrMode: AddrModeXIndirect},
	0x31: &instr{name: "AND", size: 2, cycles: 5, fn: and, addrMode: AddrModeIndirectY},

	0x0a: &instr{name: "ASL", size: 1, cycles: 2, fn: asl, addrMode: AddrModeAccumulator},
	0x06: &instr{name: "ASL", size: 2, cycles: 5, fn: asl, addrMode: AddrModeZeroPage},
	0x16: &instr{name: "ASL", size: 2, cycles: 6, fn: asl, addrMode: AddrModeZeroX},
	0x0e: &instr{name: "ASL", size: 3, cycles: 6, fn: asl, addrMode: AddrModeAbs},
	0x1e: &instr{name: "ASL", size: 3, cycles: 7, fn: asl, addrMode: AddrModeAbsX},

	0x90: &instr{name: "BCC", size: 2, cycles: 2, fn: bcc, addrMode: AddrModeRelative},
	0xb0: &instr{name: "BCS", size: 2, cycles: 2, fn: bcs, addrMode: AddrModeRelative},
	0xf0: &instr{name: "BEQ", size: 2, cycles: 2, fn: beq, addrMode: AddrModeRelative},

	0x24: &instr{name: "BIT", size: 2, cycles: 3, fn: bit, addrMode: AddrModeZeroPage},
	0x2c: &instr{name: "BIT", size: 3, cycles: 4, fn: bit, addrMode: AddrModeAbs},

	0x30: &instr{name: "BMI", size: 2, cycles: 2, fn: bmi, addrMode: AddrModeRelative},
	0xd0: &instr{name: "BNE", size: 2, cycles: 2, fn: bne, addrMode: AddrModeRelative},
	0x10: &instr{name: "BPL", size: 2, cycles: 2, fn: bpl, addrMode: AddrModeRelative},
	0x00: &instr{name: "BRK", size: 1, cycles: 7, fn: brk, addrMode: AddrModeImplied},
	0x50: &instr{name: "BVC", size: 2, cycles: 2, fn: bvc, addrMode: AddrModeRelative},
	0x70: &instr{name: "BVS", size: 2, cycles: 2, fn: bvs, addrMode: AddrModeRelative},

	0x18: &instr{name: "CLC", size: 1, cycles: 2, fn: clc, addrMode: AddrModeImplied},
	0xd8: &instr{name: "CLD", size: 1, cycles: 2, fn: cld, addrMode: AddrModeImplied},
	0x58: &instr{name: "CLI", size: 1, cycles: 2, fn: cli, addrMode: AddrModeImplied},
	0xb8: &instr{name: "CLV", size: 1, cycles: 2, fn: clv, addrMode: AddrModeImplied},

	0xc9: &instr{name: "CMP", size: 2, cycles: 2, fn: cmp, addrMode: AddrModeImmediate},
	0xc5: &instr{name: "CMP", size: 2, cycles: 3, fn: cmp, addrMode: AddrModeZeroPage},
	0xd5: &instr{name: "CMP", size: 2, cycles: 4, fn: cmp, addrMode: AddrModeZeroX},
	0xcd: &instr{name: "CMP", size: 3, cycles: 4, fn: cmp, addrMode: AddrModeAbs},
	0xdd: &instr{name: "CMP", size: 3, cycles: 4, fn: cmp, addrMode: AddrModeAbsX},
	0xd9: &instr{name: "CMP", size: 3, cycles: 4, fn: cmp, addrMode: AddrModeAbsY},
	0xc1: &instr{name: "CMP", size: 2, cycles: 6, fn: cmp, addrMode: AddrModeXIndirect},
	0xd1: &instr{name: "CMP", size: 2, cycles: 5, fn: cmp, addrMode: AddrModeIndirectY},
	0xe0: &instr{name: "CPX", size: 2, cycles: 2, fn: cpx, addrMode: AddrModeImmediate},
	0xe4: &instr{name: "CPX", size: 2, cycles: 3, fn: cpx, addrMode: AddrModeZeroPage},
	0xec: &instr{name: "CPX", size: 3, cycles: 4, fn: cpx, addrMode: AddrModeAbs},
	0xc0: &instr{name: "CPY", size: 2, cycles: 2, fn: cpy, addrMode: AddrModeImmediate},
	0xc4: &instr{name: "CPY", size: 2, cycles: 3, fn: cpy, addrMode: AddrModeZeroPage},
	0xcc: &instr{name: "CPY", size: 3, cycles: 4, fn: cpy, addrMode: AddrModeAbs},

	0xc6: &instr{name: "DEC", size: 2, cycles: 5, fn: dec, addrMode: AddrModeZeroPage},
	0xd6: &instr{name: "DEC", size: 2, cycles: 6, fn: dec, addrMode: AddrModeZeroX},
	0xce: &instr{name: "DEC", size: 3, cycles: 6, fn: dec, addrMode: AddrModeAbs},
	0xde: &instr{name: "DEC", size: 3, cycles: 7, fn: dec, addrMode: AddrModeAbsX},
	0xca: &instr{name: "DEX", size: 1, cycles: 2, fn: dex, addrMode: AddrModeImplied},
	0x88: &instr{name: "DEY", size: 1, cycles: 2, fn: dey, addrMode: AddrModeImplied},

	0x49: &instr{name: "EOR", size: 2, cycles: 2, fn: eor, addrMode: AddrModeImmediate},
	0x45: &instr{name: "EOR", size: 2, cycles: 3, fn: eor, addrMode: AddrModeZeroPage},
	0x55: &instr{name: "EOR", size: 2, cycles: 4, fn: eor, addrMode: AddrModeZeroX},
	0x4d: &instr{name: "EOR", size: 3, cycles: 4, fn: eor, addrMode: AddrModeAbs},
	0x5d: &instr{name: "EOR", size: 3, cycles: 4, fn: eor, addrMode: AddrModeAbsX},
	0x59: &instr{name: "EOR", size: 3, cycles: 4, fn: eor, addrMode: AddrModeAbsY},
	0x41: &instr{name: "EOR", size: 2, cycles: 6, fn: eor, addrMode: AddrModeXIndirect},
	0x51: &instr{name: "EOR", size: 2, cycles: 5, fn: eor, addrMode: AddrModeIndirectY},

	0xe6: &instr{name: "INC", size: 2, cycles: 5, fn: inc, addrMode: AddrModeZeroPage},
	0xf6: &instr{name: "INC", size: 2, cycles: 6, fn: inc, addrMode: AddrModeZeroX},
	0xee: &instr{name: "INC", size: 3, cycles: 6, fn: inc, addrMode: AddrModeAbs},
	0xfe: &instr{name: "INC", size: 3, cycles: 7, fn: inc, addrMode: AddrModeAbsX},
	0xe8: &instr{name: "INX", size: 1, cycles: 2, fn: inx, addrMode: AddrModeImplied},
	0xc8: &instr{name: "INY", size: 1, cycles: 2, fn: iny, addrMode: AddrModeImplied},

	0x4c: &instr{name: "JMP", size: 3, cycles: 3, fn: jmp, addrMode: AddrModeAbs},
	0x6c: &instr{name: "JMP", size: 3, cycles: 5, fn: jmp, addrMode: AddrModeIndirect},
	0x20: &instr{name: "JSR", size: 3, cycles: 6, fn: jsr, addrMode: AddrModeAbs},

	0xa9: &instr{name: "LDA", size: 2, cycles: 2, fn: lda, addrMode: AddrModeImmediate},
	0xa5: &instr{name: "LDA", size: 2, cycles: 3, fn: lda, addrMode: AddrModeZeroPage},
	0xb5: &instr{name: "LDA", size: 2, cycles: 4, fn: lda, addrMode: AddrModeZeroX},
	0xad: &instr{name: "LDA", size: 3, cycles: 4, fn: lda, addrMode: AddrModeAbs},
	0xbd: &instr{name: "LDA", size: 3, cycles: 4, fn: lda, addrMode: AddrModeAbsX},
	0xb9: &instr{name: "LDA", size: 3, cycles: 4, fn: lda, addrMode: AddrModeAbsY},
	0xa1: &instr{name: "LDA", size: 2, cycles: 6, fn: lda, addrMode: AddrModeXIndirect},
	0xb1: &instr{name: "LDA", size: 2, cycles: 5, fn: lda, addrMode: AddrModeIndirectY},
	0xa2: &instr{name: "LDX", size: 2, cycles: 2, fn: ldx, addrMode: AddrModeImmediate},
	0xa6: &instr{name: "LDX", size: 2, cycles: 3, fn: ldx, addrMode: AddrModeZeroPage},
	0xb6: &instr{name: "LDX", size: 2, cycles: 4, fn: ldx, addrMode: AddrModeZeroY},
	0xae: &instr{name: "LDX", size: 3, cycles: 4, fn: ldx, addrMode: AddrModeAbs},
	0xbe: &instr{name: "LDX", size: 3, cycles: 4, fn: ldx, addrMode: AddrModeAbsY},
	0xa0: &instr{name: "LDY", size: 2, cycles: 2, fn: ldy, addrMode: AddrModeImmediate},
	0xa4: &instr{name: "LDY", size: 2, cycles: 3, fn: ldy, addrMode: AddrModeZeroPage},
	0xb4: &instr{name: "LDY", size: 2, cycles: 4, fn: ldy, addrMode: AddrModeZeroX},
	0xac: &instr{name: "LDY", size: 3, cycles: 4, fn: ldy, addrMode: AddrModeAbs},
	0xbc: &instr{name: "LDY", size: 3, cycles: 4, fn: ldy, addrMode: AddrModeAbsX},

	0x4a: &instr{name: "LSR", size: 1, cycles: 2, fn: lsr, addrMode: AddrModeAccumulator},
	0x46: &instr{name: "LSR", size: 2, cycles: 5, fn: lsr, addrMode: AddrModeZeroPage},
	0x56: &instr{name: "LSR", size: 2, cycles: 6, fn: lsr, addrMode: AddrModeZeroX},
	0x4e: &instr{name: "LSR", size: 3, cycles: 6, fn: lsr, addrMode: AddrModeAbs},
	0x5e: &instr{name: "LSR", size: 3, cycles: 7, fn: lsr, addrMode: AddrModeAbsX},

	0xea: &instr{name: "NOP", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},

	0x09: &instr{name: "ORA", size: 2, cycles: 2, fn: ora, addrMode: AddrModeImmediate},
	0x05: &instr{name: "ORA", size: 2, cycles: 3, fn: ora, addrMode: AddrModeZeroPage},
	0x15: &instr{name: "ORA", size: 2, cycles: 4, fn: ora, addrMode: AddrModeZeroX},
	0x0d: &instr{name: "ORA", size: 3, cycles: 4, fn: ora, addrMode: AddrModeAbs},
	0x1d: &instr{name: "ORA", size: 3, cycles: 4, fn: ora, addrMode: AddrModeAbsX},
	0x19: &instr{name: "ORA", size: 3, cycles: 4, fn: ora, addrMode: AddrModeAbsY},
	0x01: &instr{name: "ORA", size: 2, cycles: 6, fn: ora, addrMode: AddrModeXIndirect},
	0x11: &instr{name: "ORA", size: 2, cycles: 5, fn: ora, addrMode: AddrModeIndirectY},

	0x48: &instr{name: "PHA", size: 1, cycles: 3, fn: pha, addrMode: AddrModeImplied},
	0x08: &instr{name: "PHP", size: 1, cycles: 3, fn: php, addrMode: AddrModeImplied},
	0x68: &instr{name: "PLA", size: 1, cycles: 4, fn: pla, addrMode: AddrModeImplied},
	0x28: &instr{name: "PLP", size: 1, cycles: 4, fn: plp, addrMode: AddrModeImplied},

	0x2a: &instr{name: "ROL", size: 1, cycles: 2, fn: rol, addrMode: AddrModeAccumulator},
	0x26: &instr{name: "ROL", size: 2, cycles: 5, fn: rol, addrMode: AddrModeZeroPage},
	0x36: &instr{name: "ROL", size: 2, cycles: 6, fn: rol, addrMode: AddrModeZeroX},
	0x2e: &instr{name: "ROL", size: 3, cycles: 6, fn: rol, addrMode: AddrModeAbs},
	0x3e: &instr{name: "ROL", size: 3, cycles: 7, fn: rol, addrMode: AddrModeAbsX},
	0x6a: &instr{name: "ROR", size: 1, cycles: 2, fn: ror, addrMode: AddrModeAccumulator},
	0x66: &instr{name: "ROR", size: 2, cycles: 5, fn: ror, addrMode: AddrModeZeroPage},
	0x76: &instr{name: "ROR", size: 2, cycles: 6, fn: ror, addrMode: AddrModeZeroX},
	0x6e: &instr{name: "ROR", size: 3, cycles: 6, fn: ror, addrMode: AddrModeAbs},
	0x7e: &instr{name: "ROR", size: 3, cycles: 7, fn: ror, addrMode: AddrModeAbsX},
	0x40: &instr{name: "RTI", size: 1, cycles: 6, fn: rti, addrMode: AddrModeImplied},
	0x60: &instr{name: "RTS", size: 1, cycles: 6, fn: rts, addrMode: AddrModeImplied},

	0xe9: &instr{name: "SBC", size: 2, cycles: 2, fn: sbc, addrMode: AddrModeImmediate},
	0xe5: &instr{name: "SBC", size: 2, cycles: 3, fn: sbc, addrMode: AddrModeZeroPage},
	0xf5: &instr{name: "SBC", size: 2, cycles: 4, fn: sbc, addrMode: AddrModeZeroX},
	0xed: &instr{name: "SBC", size: 3, cycles: 4, fn: sbc, addrMode: AddrModeAbs},
	0xfd: &instr{name: "SBC", size: 3, cycles: 4, fn: sbc, addrMode: AddrModeAbsX},
	0xf9: &instr{name: "SBC", size: 3, cycles: 4, fn: sbc, addrMode: AddrModeAbsY},
	0xe1: &instr{name: "SBC", size: 2, cycles: 6, fn: sbc, addrMode: AddrModeXIndirect},
	0xf1: &instr{name: "SBC", size: 2, cycles: 5, fn: sbc, addrMode: AddrModeIndirectY},

	0x38: &instr{name: "SEC", size: 1, cycles: 2, fn: sec, addrMode: AddrModeImplied},
	0xf8: &instr{name: "SED", size: 1, cycles: 2, fn: sed, addrMode: AddrModeImplied},
	0x78: &instr{name: "SEI", size: 1, cycles: 2, fn: sei, addrMode: AddrModeImplied},

	0x85: &instr{name: "STA", size: 2, cycles: 3, fn: sta, addrMode: AddrModeZeroPage},
	0x95: &instr{name: "STA", size: 2, cycles: 4, fn: sta, addrMode: AddrModeZeroX},
	0x8d: &instr{name: "STA", size: 3, cycles: 4, fn: sta, addrMode: AddrModeAbs},
	0x9d: &instr{name: "STA", size: 3, cycles: 5, fn: sta, addrMode: AddrModeAbsX},
	0x99: &instr{name: "STA", size: 3, cycles: 5, fn: sta, addrMode: AddrModeAbsY},
	0x81: &instr{name: "STA", size: 2, cycles: 6, fn: sta, addrMode: AddrModeXIndirect},
	0x91: &instr{name: "STA", size: 2, cycles: 6, fn: sta, addrMode: AddrModeIndirectY},

	0x86: &instr{name: "STX", size: 2, cycles: 3, fn: stx, addrMode: AddrModeZeroPage},
	0x96: &instr{name: "STX", size: 2, cycles: 4, fn: stx, addrMode: AddrModeZeroY},
	0x8e: &instr{name: "STX", size: 3, cycles: 4, fn: stx, addrMode: AddrModeAbs},

	0x84: &instr{name: "STY", size: 2, cycles: 3, fn: sty, addrMode: AddrModeZeroPage},
	0x94: &instr{name: "STY", size: 2, cycles: 4, fn: sty, addrMode: AddrModeZeroX},
	0x8c: &instr{name: "STY", size: 3, cycles: 4, fn: sty, addrMode: AddrModeAbs},

	0xaa: &instr{name: "TAX", size: 1, cycles: 2, fn: tax, addrMode: AddrModeImplied},
	0xa8: &instr{name: "TAY", size: 1, cycles: 2, fn: tay, addrMode: AddrModeImplied},
	0xba: &instr{name: "TSX", size: 1, cycles: 2, fn: tsx, addrMode: AddrModeImplied},
	0x8a: &instr{name: "TXA", size: 1, cycles: 2, fn: txa, addrMode: AddrModeImplied},
	0x9a: &instr{name: "TXS", size: 1, cycles: 2, fn: txs, addrMode: AddrModeImplied},
	0x98: &instr{name: "TYA", size: 1, cycles: 2, fn: tya, addrMode: AddrModeImplied},

	// Unofficial opcodes

	// "Jams" the machine, according to http://nesdev.com/6502_cpu.txt. Basically
	// repeats itself forever since their size is 0 and PC is never incremented
	0x02: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x12: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x22: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x32: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x42: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x52: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x62: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x72: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x92: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0xb2: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0xd2: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0xf2: &instr{name: "HLT", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},

	//SLO - Rarely "Jams" the CPU
	0x03: &instr{name: "SLO", size: 2, cycles: 2, fn: nop, addrMode: AddrModeXIndirect},
	0x07: &instr{name: "SLO", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroPage},
	0x0f: &instr{name: "SLO", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbs},
	0x13: &instr{name: "SLO", size: 2, cycles: 2, fn: nop, addrMode: AddrModeIndirectY},
	0x17: &instr{name: "SLO", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0x1b: &instr{name: "SLO", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsY},
	0x1f: &instr{name: "SLO", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsX},

	0x04: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroPage},
	0x0c: &instr{name: "NOP", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbs},
	0x14: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0x1a: &instr{name: "NOP", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x1c: &instr{name: "NOP", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsX},
	0x34: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0x3a: &instr{name: "NOP", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x3c: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeAbsX},
	0x44: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroPage},
	0x54: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0x5a: &instr{name: "NOP", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x5c: &instr{name: "NOP", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsX},
	0x64: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroPage},
	0x74: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0x7a: &instr{name: "NOP", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0x7c: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeAbsX},
	0x80: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeImmediate},
	0x82: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeImmediate},
	0x89: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeImmediate},
	0xc2: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeImmediate},
	0xd4: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0xda: &instr{name: "NOP", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0xdc: &instr{name: "NOP", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsX},
	0xe2: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeImmediate},
	0xf4: &instr{name: "NOP", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0xfa: &instr{name: "NOP", size: 1, cycles: 2, fn: nop, addrMode: AddrModeImplied},
	0xfc: &instr{name: "NOP", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsX},

	0xe3: &instr{name: "ISC", size: 2, cycles: 2, fn: nop, addrMode: AddrModeXIndirect},
	0xe7: &instr{name: "ISC", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroPage},
	0xef: &instr{name: "ISC", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbs},
	0xf3: &instr{name: "ISC", size: 2, cycles: 2, fn: nop, addrMode: AddrModeIndirectY},
	0xf7: &instr{name: "ISC", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0xfb: &instr{name: "ISC", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsY},
	0xff: &instr{name: "ISC", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsX},

	0x23: &instr{name: "RLA", size: 2, cycles: 2, fn: nop, addrMode: AddrModeXIndirect},
	0x27: &instr{name: "RLA", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroPage},
	0x2f: &instr{name: "RLA", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbs},
	0x33: &instr{name: "RLA", size: 2, cycles: 2, fn: nop, addrMode: AddrModeIndirectY},
	0x37: &instr{name: "RLA", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0x3b: &instr{name: "RLA", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsY},
	0x3f: &instr{name: "RLA", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsX},

	0x43: &instr{name: "SRE", size: 2, cycles: 2, fn: nop, addrMode: AddrModeXIndirect},
	0x47: &instr{name: "SRE", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroPage},
	0x4f: &instr{name: "SRE", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbs},
	0x53: &instr{name: "SRE", size: 2, cycles: 2, fn: nop, addrMode: AddrModeIndirectY},
	0x57: &instr{name: "SRE", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0x5b: &instr{name: "SRE", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsY},
	0x5f: &instr{name: "SRE", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsX},

	0x63: &instr{name: "RRA", size: 2, cycles: 2, fn: nop, addrMode: AddrModeXIndirect},
	0x67: &instr{name: "RRA", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroPage},
	0x6f: &instr{name: "RRA", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbs},
	0x73: &instr{name: "RRA", size: 2, cycles: 2, fn: nop, addrMode: AddrModeIndirectY},
	0x77: &instr{name: "RRA", size: 2, cycles: 2, fn: nop, addrMode: AddrModeZeroX},
	0x7b: &instr{name: "RRA", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsY},
	0x7f: &instr{name: "RRA", size: 3, cycles: 2, fn: nop, addrMode: AddrModeAbsX},
}
